/*-----------------------------------------------------
    NewsLister newslister.jquery.plugin.js
	
	@version    1.0.0
	@copyright Tenderfeel
	@author Tenderfeel(tenderfeel@gmail.com)
	@link http://tenderfeel.xsrv.jp/
	
------------------------------------------------------*/	

/*//////////////// O P T I O N S ///////////////////////

	logarea   :  ログ表示要素のID
	pass      :  feed.phpまでのパス
	loader    :  ローデイング画像
	method    :  ログ読み込み時のメソッド
	style     :  ログの出力形式(ul,table,dl)
	dateformat:  日時フォーマット
	max       :  ログの最大表示数
	
///////////////////////////////////////////////////////*/

(function($) {
		  
	$.fn.NewsLister = function(options){
		var options = $.extend({
			pass:'feed.php',
			loader:'<img src="include/images/loader.gif" width="128" height="15" alt="Loading" />',
			method:'get',
			style:null,
			dateformat:'%Y/%M/%D@%h:%m',
			dispmax:5
		}, options);
		
		
		$.fn.NewsLister.pageNavi = null;
		$.fn.NewsLister.current = 0;

		return this.each(function(i,el){
			if ( $.browser.msie && $.browser.version !="7.0" && navigator.appVersion.indexOf("MSIE 8.")==-1) {
				error(this);
			}else{
				var $this = $(this);
				create_loading(options).appendTo($this);
				request($this,options,{"viewtype":"json","page":0,"max":options.dispmax});
			}
			
			return this;
		});
	
	};
	function request(obj,options,data){
		$.getJSON(options.pass+"?callback=?",data,function(r){
			create_paragraph(r,obj,options);
		});
	};
	
	/*******************************
	 * 段落作成
	 *******************************/
	function create_paragraph(data,obj,options){
		
		if(obj.children().length != 0)
			obj.children(":first").remove();
		
		switch(options.style){
			case "ul": var box = $("<ul></ul>"); break;
			
			case "table": var box = $("<table></table>"); break;
			
			default: var box = $("<dl></dl>");
		}
		
		$.each(data.items, function(i,item){
									
			switch(options.style){
				
				case "ul":
					var li = $("<li></li>");
					$('<span class="date"></span>').html(showLocalDate(options.dateformat,item.date)).appendTo(li);
					$("<strong></strong>").html(item.comment).appendTo(li);
					li.appendTo(box);
				break;
				
				case "table":
					var li = $("<tr></tr>");
					$('<th class="date" scope="row"></th>').html(showLocalDate(options.dateformat,item.date)).appendTo(li);
					$("<td></td>").html(item.comment).appendTo(li);
					li.appendTo(box);
				break;
				
				default:
					$("<dt></dt>").html(showLocalDate(options.dateformat,item.date)).appendTo(box);
					$("<dd></dd>").html(item.comment).appendTo(box);
			}
		});
				
		box.prependTo(obj).hide().fadeIn(1000);
		
		if(!$.fn.NewsLister.pageNavi && data.count > options.dispmax)
			create_pagenavi(obj, data.pagenum, options);
		
	};
	
	/*******************************
	 * ナビゲーション作成
	 *******************************/
	function create_pagenavi(obj,pmax,options){
		
		 var pageNavi = $('<ul class="pagelink">');
		 
		 var prev = $('<li class="prev"></li>').append($('<a href="#">&laquo;Prev</a>')).click(function(){
			$.fn.NewsLister.current--;
			request(obj,options,{"viewtype":"json","page":$.fn.NewsLister.current,"max":options.dispmax});
			if($.fn.NewsLister.current >= 2 || $.fn.NewsLister.current != 0) prev.show();
			else $(this).hide();
			if($.fn.NewsLister.current < pmax) next.show();
		 }).prependTo(pageNavi).hide();
		 
		 var next =  $('<li class="next"></li>').append($('<a href="#">Next &raquo;</a>')).click(function(){
			$.fn.NewsLister.current++;
			request(obj,options,{"viewtype":"json","page":$.fn.NewsLister.current,"max":options.dispmax});
			if($.fn.NewsLister.current >= 2 || $.fn.NewsLister.current != 0) prev.show();
			if($.fn.NewsLister.current < pmax) next.show();
			else $(this).hide();
			
		 }).appendTo(pageNavi);
		 
		 $.fn.NewsLister.pageNavi = pageNavi;
		 pageNavi.insertBefore(obj);
	};
	
	/*******************************
	 * エラー表示
	 *******************************/
	function error(obj){
		$(obj).append("ご利用中のブラウザバージョンには未対応です。<br /><a href=\"http://www.microsoft.com/downloads/details.aspx?FamilyID=341c2ad5-8c3d-4347-8c03-08cdecd8852b&DisplayLang=ja\" target=\"_blank\" class=\"ie8update\">今すぐ最新版にアップデート！</a>");

	};
	/*******************************
	 * 日付のフォーマット
	 *******************************/
	function showLocalDate(format,timestamp){
		var dt = new Date(timestamp * 1000);
		format = format.replace("%Y",dt.getFullYear());
		format = format.replace("%M",(dt.getUTCMonth()+1));
		format = format.replace("%D",dt.getDate());
		format = format.replace("%h",dt.getHours());
		format = format.replace("%m",dt.getMinutes());
		return format;
	};
	
	/*******************************
	 * ローディングバー作成
	 *******************************/
	function create_loading(options){
		return $('<p id="loader" style="margin:20px;text-align:center;">'+options.loader+'</p>');

	};
	
})(jQuery);